package com.eastfair.auth.service;

import com.eastfair.auth.dto.RoleDTO;
import com.eastfair.auth.dto.RoleSaveDTO;
import com.eastfair.auth.vo.RoleVo;
import com.eastfair.boot.service.SuperCacheService;
import com.eastfair.auth.entity.Role;
import com.eastfair.core.base.R;

import java.util.List;

/**
 * <p>
 * 业务接口
 *
 * </p>
 *
 * @author ligang
 * @date 2021-07-23
 */
public interface RoleService extends SuperCacheService<Role> {
    /**
     * 创建角色
     *
     * @param roleDTO 角色新增实体
     * @return
     */
    R<Role> createRole(RoleDTO roleDTO);


    /**
     * 修改角色
     *
     * @param roleDTO 修改角色
     * @return
     */
    R<Role> updateRole(RoleDTO roleDTO);

    /**
     * 删除角色
     *
     * @param roleIds 角色id集合
     * @return
     */
    R delRole(List<Long> roleIds);


    /**
     * 剔除角色的所有关系
     *
     * @param roleIds 角色id集合
     * @return
     */
    R removeRoleRelation(List<Long> roleIds);


    /**
     * 剔除角色的菜单关系
     *
     * @param roleIds 角色id集合
     * @return
     */
    R removeRoleRelationOfMenu(List<Long> roleIds);

    /**
     * 重新更新角色菜单关系
     *
     * @param roleDTO 角色DTo
     * @return
     */
    R reloadRoleRelationOfMenu(RoleDTO roleDTO);



    /**
     * 查询角色全部信息
     *
     * @param roleIds 角色id集合
     * @return
     */
    List<RoleVo> findAllById(List<Long> roleIds);



    /**
     * 查询角色以及旗下菜单
     *
     * @param roleIds 角色id集合
     * @return
     */
    List<RoleVo> findAllMenuById(List<Long> roleIds);


    /**
     * 查询角色旗下菜单id集合
     *
     * @param roleId 角色id
     * @return
     */
    List<Long> findMenuIdById(Long roleId);

    /**
     * 剔除角色的事件关系
     *
     * @param roleIds 角色id集合
     * @return
     */
    R removeRoleRelationOfFunction(List<Long> roleIds);

    /**
     * 重新更新角色事件关系
     *
     * @param roleDTO 角色DTo
     * @return
     */
    R reloadRoleRelationOfFunction(RoleDTO roleDTO);


    /**
     * 查询角色信息和旗下菜单
     * @return
     */
    RoleVo getAllById(Long roleId);


    /**
     * 查询所有角色
     * @return
     */
    List<RoleVo> queryAllRole();

    /**
     * 复制角色
     * @param roleVoList
     * @return
     */
    List<RoleVo> copyRole(List<RoleVo> roleVoList);
}
